import { Controller } from 'egg';
import Msg from '../service/Msg';
import Util from '../service/Util';

export default class MessageTemplateController extends Controller {
  // 获取消息模板列表
  public async getMessageTemplates() {
    const { ctx } = this;
    const userId = Util.getUserId(ctx);

    const list = await ctx.repo.MessageTemplate.find({
      where: { userId },
      order: { createDate: 'DESC' },
    });

    ctx.body = Msg.success(list);
  }

  // 创建消息模板
  public async createMessageTemplate() {
    const { ctx } = this;
    const { title, content, msgType } = ctx.request.body;

    if (Util.emptyVaild(title, content)) {
      return ctx.body = Msg.error('标题和内容不能为空');
    }

    const params = {
      userId: Util.getUserId(ctx),
      title,
      content,
      msgType: msgType || 'text',
    };

    try {
      const result = await ctx.repo.MessageTemplate.save(params);
      ctx.body = Msg.success(result);
    } catch (error) {
      ctx.body = Msg.error('创建消息模板失败');
    }
  }

  // 更新消息模板
  public async updateMessageTemplate() {
    const { ctx } = this;
    const { id, title, content, msgType } = ctx.request.body;

    if (Util.emptyVaild(id, title, content)) {
      return ctx.body = Msg.error('参数不能为空');
    }

    const userId = Util.getUserId(ctx);
    const template = await ctx.repo.MessageTemplate.findOne({ id, userId });

    if (!template) {
      return ctx.body = Msg.error('消息模板不存在或无权限修改');
    }

    try {
      await ctx.repo.MessageTemplate.update(
        { id },
        { title, content, msgType: msgType || 'text' }
      );
      ctx.body = Msg.success();
    } catch (error) {
      ctx.body = Msg.error('更新消息模板失败');
    }
  }

  // 删除消息模板
  public async deleteMessageTemplate() {
    const { ctx } = this;
    const { id } = ctx.request.body;

    if (Util.emptyVaild(id)) {
      return ctx.body = Msg.error('ID不能为空');
    }

    const userId = Util.getUserId(ctx);
    const template = await ctx.repo.MessageTemplate.findOne({ id, userId });

    if (!template) {
      return ctx.body = Msg.error('消息模板不存在或无权限删除');
    }

    try {
      await ctx.repo.MessageTemplate.delete({ id, userId });
      ctx.body = Msg.success();
    } catch (error) {
      ctx.body = Msg.error('删除消息模板失败');
    }
  }
}
